#pragma once

#include "SimpleSocket.h"
#include "SimpleEvent.h"

namespace RoomFW {

//
// Class:	SimpleChildProcess
//
// Description:	
//
// Author:	Andrew Sage
//
class SimpleChildProcess
{
public:

	//
	// Method:	SimpleChildProcess
	//
	// Description:	Constructor
	//
	// Parameters:	None
	//
	SimpleChildProcess();

	//
	// Method:	~SimpleChildProcess
	//
	// Description:	Destructor
	//
	~SimpleChildProcess();

	//
	// Method:	create
	//
	// Description:	
	//
	// Parameters:
	//
	// Return:	Success.
	//
	bool create(const char* applicationName, char* commandLine);

	//
	// Method:	wait
	//
	// Description:	
	//
	// Parameters:	None.
	//
	// Return:	
	//
	bool wait(DWORD timeout = INFINITE) const;


	// kill process
	void kill();
private:

    STARTUPINFO si_;
    PROCESS_INFORMATION pi_;
	std::string cmdLn_;

	//
	// Non-copy-able!
	//
	SimpleChildProcess(const SimpleChildProcess&);
	SimpleChildProcess& operator=(const SimpleChildProcess&);

};
typedef ::boost::shared_ptr<SimpleChildProcess> SimpleChildProcessSP;

}
